home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / accounts.c < prev    next >
Text File  |  1996-05-26  |  12KB  |  504 lines

  1. /*
  2.  * lect_msg.c
  3.  *
  4.  * Purpose:
  5.  * -------- 
  6.  * lecture des messages d'une rubrique:
  7.  *
  8.  * Notes:
  9.  * ------
  10.  *
  11.  * History:
  12.  * --------
  13.  * 18.12.94: fplanque: Created
  14.  */
  15.  
  16.  
  17.      #include "!OPTIONS.H"                /* Options de compilation */         
  18.     #define    THIS_FILE    "ACCOUNTS.C v1.00 - 03.95"
  19.           
  20.  
  21. /*
  22.  * System headers:
  23.  */
  24.     #include    <stdio.h>                    /* header standard */
  25.     #include <string.h>                    /* header tt de chaines */
  26.    
  27.  
  28. /*
  29.  * Custom headers:
  30.  */
  31.     #include "SPEC_PU.H"
  32.     #include "S_MALLOC.H"
  33.     #include "DEF_ARBO.H"
  34.     #include "DATPG_PU.H"
  35.     #include "DBSYS_PU.H"
  36.     #include    "DEBUG_PU.H"    
  37.     #include    "LISTS_PU.H"    
  38.     #include    "SERV_PU.H"
  39.     #include    "LINE0_PU.H"
  40.     #include    "DBINT_PU.H"
  41.     #include    "IOFLD_PU.H"
  42.     #include "ACOUNTPU.H"
  43.     #include "TERM_PU.H"
  44.     #include "TEXT_PU.H"
  45.     #include    "SERCOMPU.H"
  46.  
  47.  
  48. /*
  49.  * Prototypes:
  50.  */
  51.     static    void    Voie_RecIdData(
  52.                 VOIE             *    pVoie_curr,            /* In: Voie concern‚e */
  53.                 const char    *    cpsz_UserName,        /* In: Pseudo */
  54.                 const char    *    cpsz_FirstName,    /* In: Pr‚nom */
  55.                 const char    *    cpsz_LastName );    /* In: Nom */
  56.  
  57.     static    void    Record_InFieldsToDB( VOIE *pVoie_curr );
  58.  
  59.  
  60. /*
  61.  * --------------------------- METHODES -------------------------------
  62.  */
  63.  
  64.  
  65. /*
  66.  * Voie_RecAccntData(-)
  67.  *
  68.  * Purpose:
  69.  * --------
  70.  * La voie m‚morise les nouvelles donn‚es d'identification
  71.  * et les affiche ds la log window au passage
  72.  *
  73.  * Suggest:
  74.  * --------
  75.  * Inclure pointeur sur compte
  76.  *
  77.  * History:
  78.  * --------
  79.  * 14.01.95: fplanque: Crated
  80.  */
  81. void    Voie_RecIdData(
  82.             VOIE             *    pVoie_curr,            /* In: Voie concern‚e */
  83.             const char    *    cpsz_UserName,        /* In: Pseudo */
  84.             const char    *    cpsz_FirstName,    /* In: Pr‚nom */
  85.             const char    *    cpsz_LastName )    /* In: Nom */
  86. {
  87.     if( cpsz_UserName != NULL )
  88.     {
  89.         sprintf( G_tmp_buffer, "   UserName: %s", cpsz_UserName );
  90.         add_textinf( pVoie_curr -> wi_params, G_tmp_buffer );
  91.     }
  92.     freeOld_dupString( &(pVoie_curr -> pMsz_Login), cpsz_UserName );
  93.  
  94.     if( cpsz_FirstName != NULL )
  95.     {
  96.         sprintf( G_tmp_buffer, "   Pr‚nom: %s", cpsz_FirstName );
  97.         add_textinf( pVoie_curr -> wi_params, G_tmp_buffer );
  98.     }
  99.     freeOld_dupString( &(pVoie_curr -> pMsz_FirstName), cpsz_FirstName );
  100.  
  101.     if( cpsz_LastName != NULL )
  102.     {
  103.         sprintf( G_tmp_buffer, "   Nom: %s", cpsz_LastName );
  104.         add_textinf( pVoie_curr -> wi_params, G_tmp_buffer );
  105.     }
  106.     freeOld_dupString( &(pVoie_curr -> pMsz_LastName), cpsz_LastName );
  107. }
  108.  
  109.  
  110.  
  111. /*
  112.  * keyaction_Identification(-)
  113.  *
  114.  * Purpose:
  115.  * --------
  116.  * R‚agit … la touche press‚ sur une page IDENTIFY
  117.  *
  118.  * Suggest:
  119.  * --------
  120.  * Gestion pr‚nom et nom
  121.  *
  122.  * History:
  123.  * --------
  124.  * 13.11.94: fplanque: Created
  125.  * 14.11.94: enhanced
  126.  * 16.11.94: possibilit‚ chgt de page aprŠs entr‚e Lastname
  127.  * 27.11.94: utilise try_FieldMove()
  128.  * 05.12.94: utilise Move_FocusTo...
  129.  */
  130. void    keyaction_Identification(
  131.             KEYCODE    curr_keypress, 
  132.             VOIE     *    pVoie_curr )
  133. {
  134.     switch( curr_keypress )
  135.     {
  136.         case    KEY_ENVOI:                
  137.         {
  138.             const char *    cpsz_UserName;
  139.             const char *    cpsz_FirstName;
  140.             const char *    cpsz_LastName;
  141.             const char *    cpsz_Password;
  142.         
  143.             /*
  144.              * V‚rifie si le mec tape un mot clef:
  145.              */
  146.             if( serv_handleKeyword( pVoie_curr, '*' ) )
  147.             {
  148.                 break;
  149.             }
  150.         
  151.             /*
  152.              * Le mec n'a pas tap‚ de mot clef:
  153.              * C'est donc une validation de son login:
  154.              * V‚rifie si les champs sont correctement remplis:
  155.              */
  156.             if( ! validate_InFields( pVoie_curr ) )
  157.             {
  158.                 break;
  159.             } 
  160.              
  161.             /* 
  162.              * On va chercher son compte:
  163.              */
  164.  
  165.             cpsz_UserName    = aim_InField( pVoie_curr, FEI_USERNAME );
  166.             cpsz_FirstName = aim_InField( pVoie_curr, FEI_FIRSTNAME );
  167.             cpsz_LastName     = aim_InField( pVoie_curr, FEI_LASTNAME );
  168.              cpsz_Password     = aim_InField( pVoie_curr, FEI_PASSWORD );
  169.  
  170.             if( cpsz_UserName  == NULL && 
  171.                  cpsz_FirstName == NULL &&
  172.                  cpsz_LastName  == NULL )
  173.             {    /*
  174.                  * S'il n'y a pas de champ pour renseigner sur l'identit‚ du cnt:
  175.                  */
  176.                 aff_msg_l0( pVoie_curr, "Impossible de vous identifier!" );
  177.                 add_textinf( pVoie_curr -> wi_params, "  Aucun champ pour identifier le connect‚!" );
  178.                 break;
  179.             }
  180.  
  181.             /*
  182.              * Tente de trouver le connect‚ dans l'annuaire:
  183.              */
  184.             {
  185.                 DATAPAGE            *    pDataPg_dbase = pVoie_curr -> database;    /* Base de donn‚es concern‚e */
  186.                 DATA_RECORDS    *    pDataRecords = pDataPg_dbase -> data.records;    /* Infos sur les enregistrements */
  187.                 COMPACT_RECORD *    pCompactRec_Account;
  188.  
  189.                 /*
  190.                  * Cherche compte:
  191.                  */
  192.                 pCompactRec_Account = Find_CompactRecByField( pDataRecords -> first_record, 'USER', cpsz_UserName );
  193.  
  194.                 if( pCompactRec_Account != NULL )
  195.                 {
  196.                     COMPACT_FIELD    * pCompactFld_Password;
  197.                 
  198.                     /*
  199.                      * Cherche password:
  200.                      */
  201.                     pCompactFld_Password = Find_FieldinCompactRecord( pCompactRec_Account, 'PASS' );
  202.                     if( pCompactFld_Password == NULL )
  203.                     {
  204.                         aff_msg_l0( pVoie_curr, "Compte incorrectement valid‚!" );
  205.                         sprintf( G_tmp_buffer, "  Pas de mot de passe ('PASS') pour [%s]!", cpsz_UserName );
  206.                         add_textinf( pVoie_curr -> wi_params, G_tmp_buffer );
  207.                         break;
  208.                     }    
  209.                     
  210.                     if( strcmp( (char *) (pCompactFld_Password -> bytes), cpsz_Password ) != 0 )
  211.                     {    /*
  212.                          * Password incorrect:
  213.                          */
  214.                         aff_msg_l0( pVoie_curr, "Mot de passe incorrect!" );
  215.                         Move_FocusToInField_byFnct( pVoie_curr, FEI_PASSWORD, FE_LOGINDENIED );
  216.                         break;                    
  217.                     }
  218.                 }
  219.             }
  220.  
  221.             /*
  222.              * Valid‚:
  223.              */
  224.             affiche_touche( pVoie_curr, curr_keypress );        /* Affiche nom de la touche */
  225.  
  226.             /*
  227.              * m‚morise pseudo, nom, pr‚nom et les affiche:
  228.              */
  229.             Voie_RecIdData( pVoie_curr, cpsz_UserName, cpsz_FirstName, cpsz_LastName );
  230.  
  231.             /*
  232.              * Demande Changement de page:
  233.              */
  234.             follow_KeyArboLink( pVoie_curr, curr_keypress );
  235.         }
  236.             break;
  237.             
  238.  
  239.         case    KEY_SUITE:
  240.             Move_FocusToNextInField( pVoie_curr );
  241.             break;
  242.  
  243.         case    KEY_RETOUR:
  244.             Move_FocusToPrevInField( pVoie_curr );
  245.             break;
  246.  
  247.         case    KEY_REPET:
  248.         case    KEY_GUIDE:
  249.         case    KEY_SOMM:
  250.             affiche_touche( pVoie_curr, curr_keypress );        /* Affiche nom de la touche */
  251.             /*
  252.              * Demande Changement de page:
  253.              */
  254.             follow_KeyArboLink( pVoie_curr, curr_keypress );
  255.             break;
  256.  
  257.     }
  258. }
  259.  
  260.  
  261.  
  262. /*
  263.  * keyaction_NewAccount(-)
  264.  *
  265.  * Purpose:
  266.  * --------
  267.  * R‚agit … la touche press‚ sur une page NEW_ACCOUNT
  268.  *
  269.  * Suggest:
  270.  * ------
  271.  * Gestion pr‚nom et nom
  272.  *
  273.  * History:
  274.  * --------
  275.  * 05.12.94: fplanque: Created
  276.  * 14.01.95: v‚rifie si compte existe d‚j…; m‚mo username
  277.  */
  278. void    keyaction_NewAccount(
  279.             KEYCODE    curr_keypress, 
  280.             VOIE     *    pVoie_curr )
  281. {
  282.     switch( curr_keypress )
  283.     {
  284.         case    KEY_ENVOI:                
  285.         {
  286.             const char *    cpsz_UserName;
  287.             const char *    cpsz_FirstName;
  288.             const char *    cpsz_LastName;
  289.  
  290.             /*
  291.              * V‚rifie si le mec tape un mot clef:
  292.              */
  293.             if( serv_handleKeyword( pVoie_curr, '*' ) )
  294.             {
  295.                 break;
  296.             }
  297.  
  298.             /*
  299.              * V‚rifie si les champs sont correctement remplis:
  300.              */
  301.             if( ! validate_InFields( pVoie_curr ) )
  302.             {
  303.                 break;
  304.             } 
  305.             
  306.             affiche_touche( pVoie_curr, curr_keypress );        /* Affiche nom de la touche */
  307.  
  308.             /*
  309.              * V‚rifie si le UserName n'existe pas d‚j…:
  310.              */
  311.             cpsz_UserName    = aim_InField( pVoie_curr, FEI_USERNAME );
  312.             cpsz_FirstName = aim_InField( pVoie_curr, FEI_FIRSTNAME );
  313.             cpsz_LastName     = aim_InField( pVoie_curr, FEI_LASTNAME );
  314.  
  315.             if( cpsz_UserName  == NULL && 
  316.                  cpsz_FirstName == NULL &&
  317.                  cpsz_LastName  == NULL )
  318.             {    /*
  319.                  * S'il n'y a pas de champ pour renseigner sur l'identit‚ du cnt:
  320.                  */
  321.                 aff_msg_l0( pVoie_curr, "Impossible de vous identifier!" );
  322.                 add_textinf( pVoie_curr -> wi_params, "  Aucun champ pour identifier le connect‚!" );
  323.                 break;
  324.             }
  325.             
  326.             {
  327.                 DATAPAGE            *    pDataPg_dbase = pVoie_curr -> database;    /* Base de donn‚es concern‚e */
  328.                 DATA_RECORDS    *    pDataRecords = pDataPg_dbase -> data.records;    /* Infos sur les enregistrements */
  329.                 COMPACT_RECORD *    pCompactRec_Account;
  330.     
  331.                 /*
  332.                  * Cherche compte:
  333.                  */
  334.                 pCompactRec_Account = Find_CompactRecByField( pDataRecords -> first_record, 'USER', cpsz_UserName );
  335.  
  336.                 if( pCompactRec_Account != NULL )
  337.                 {
  338.                     aff_msg_l0( pVoie_curr, "Ce compte existe d‚j…!" );
  339.                     sprintf( G_tmp_buffer, "   Le compte [%s] existe d‚j…!", cpsz_UserName );
  340.                     add_textinf( pVoie_curr -> wi_params, G_tmp_buffer );
  341.                     break;
  342.                 }    
  343.  
  344.             }
  345.             
  346.             /*
  347.               * On va cr‚er le nouveau compte: 
  348.              */
  349.             aff_msg_l0( pVoie_curr, "Cr‚ation du compte." );
  350.             add_textinf( pVoie_curr -> wi_params, "   Cr‚ation d'un nouveau compte..." );
  351.  
  352.             /*
  353.              * m‚morise pseudo, nom, pr‚nom et les affiche:
  354.              */
  355.             Voie_RecIdData( pVoie_curr, cpsz_UserName, cpsz_FirstName, cpsz_LastName );
  356.  
  357.             /*
  358.               * ----------------------------------
  359.              * Enregistrement des champs ‚dit‚es:
  360.               * ----------------------------------
  361.              */
  362.             Record_InFieldsToDB( pVoie_curr );
  363.  
  364.             /*
  365.              * Demande Changement de page:
  366.              */
  367.             follow_KeyArboLink( pVoie_curr, curr_keypress );
  368.         }
  369.             break;    
  370.  
  371.  
  372.         case    KEY_SUITE:
  373.             Move_FocusToNextInField( pVoie_curr );
  374.             break;
  375.  
  376.         case    KEY_RETOUR:
  377.             Move_FocusToPrevInField( pVoie_curr );
  378.             break;
  379.  
  380.         case    KEY_REPET:
  381.         case    KEY_GUIDE:
  382.         case    KEY_SOMM:
  383.             affiche_touche( pVoie_curr, curr_keypress );        /* Affiche nom de la touche */
  384.             /*
  385.              * Demande Changement de page:
  386.              */
  387.             follow_KeyArboLink( pVoie_curr, curr_keypress );
  388.             break;
  389.  
  390.     }
  391.  
  392. }
  393.  
  394.  
  395.  
  396. /*
  397.  * Record_InFieldsToDB(-)
  398.  *
  399.  * Purpose:
  400.  * --------
  401.  * Enregistrement les donn‚es d'un formulaire ds une base de donn‚es
  402.  * G‚n‚ralement aprŠs appui sur ENVOI!
  403.  *
  404.  * Notes:
  405.  * ------
  406.  *
  407.  * History:
  408.  * --------
  409.  * 04.12.94: fplanque: derived from Record_MessageToDB
  410.  * 23.01.95: utilse le CodeChamp interne des params du champ, pour signer chaque champ!
  411.  */
  412. void    Record_InFieldsToDB( 
  413.                 VOIE    *    pVoie_curr )    /* In: Voie courante */
  414. {
  415.     IOFIELD            *    pInField_Curr;
  416.  
  417.     RECORD_FIELD     *    pListElt_First;
  418.     RECORD_FIELD     *    pListElt_New;
  419.     RECORD_FIELD     *    pListElt_Prev = NULL;
  420.     
  421.     COMPACT_RECORD    *    compact_msg;            /* Message compact‚ */
  422.     DATAPAGE            *    pDataPage_DB = pVoie_curr -> database;    /* Base de donn‚es concern‚e */
  423.     
  424.     /*
  425.      * +---------------------------------------------------+ 
  426.      * |  Cr‚ation des champs du message en liste chain‚e  |
  427.      * +---------------------------------------------------+ 
  428.      * ----
  429.      * HEAD
  430.      * ----
  431.      */
  432.     pListElt_New    = Create_HeaderFld( &G_RecNb_Null, TRUE_1 );
  433.     pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
  434.     pListElt_First    = pListElt_Prev;
  435.  
  436.  
  437.     /*
  438.      * ----
  439.      * Ajout du contenu de tous les champs ‚ditables
  440.      * de la page arbo, cad du formulaire:
  441.      * ----
  442.      */
  443.     for(    pInField_Curr = pVoie_curr -> pIOField_ListIn;
  444.             pInField_Curr != NULL;
  445.             pInField_Curr = pInField_Curr -> p_next )
  446.     {    /*
  447.          * Pour chaque champ de saisie du formulaire:
  448.          */
  449.         pListElt_New     = Create_TextRecFld( pInField_Curr -> FPar.Input -> ul_CodeChamp, pInField_Curr );
  450.  
  451.         pListElt_Prev     = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
  452.     }
  453.  
  454.  
  455.     /*
  456.      * ----
  457.      * FOOT
  458.      * ----
  459.      */
  460.     pListElt_New    = Create_FooterFld( );
  461.     pListElt_Prev    = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
  462.     
  463.  
  464.     /*
  465.      * +----------------------------------+
  466.      * |  Composition du message complet  |
  467.      * +----------------------------------+
  468.      */
  469.     compact_msg = Create_CompactRecord( pListElt_First );
  470.  
  471.  
  472.     /*
  473.      * +------------------------------------+
  474.      * | LibŠre liste de champs temporaires |
  475.      * +------------------------------------+
  476.      */
  477.     pListElt_New = pListElt_First;
  478.     while( pListElt_New != NULL )
  479.     {
  480.         pListElt_Prev = pListElt_New;
  481.         pListElt_New = pListElt_New -> next;
  482.         
  483.         FREE( pListElt_Prev -> info.string );
  484.         FREE( pListElt_Prev );    
  485.     }
  486.  
  487.     
  488.     /*
  489.      * +---------------------------------------------------+ 
  490.      * |  Insertion de ce RECORD dans la base de donn‚es:  |
  491.      * +---------------------------------------------------+
  492.      */
  493.     DBInt_AppendCompRecToDB( pVoie_curr, compact_msg, pDataPage_DB );
  494.  
  495.     
  496.     /*
  497.      * Un enregistrement de plus d'effectu‚ sur cette page arbo: 
  498.      */
  499.     pVoie_curr -> nb_records ++ ;
  500.  
  501. }
  502.  
  503.  
  504.